package com.qf.util;

import com.alibaba.fastjson.JSONObject;
import com.qf.vo.UserVO;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

/**
 * 处理jwt的签名与认证
 * @version v1.0.0
 * @Description:
 * @author: 姜红凯
 * @date: 2022.04.01
 * @since 1.0
 */
public class JwtUtil {
    /**
     * token 签发的有效期
     */
    public static final int TOKEN_EXPIRE=1000*60*30;

    /**
     * token加密算法的盐
     */
    public static final String TOKEN_KEY="qianfeng";

    /**
     * 生成一个token
     */
    public static String generatorToken(UserVO user){
        //产生token
        String token= Jwts.builder()
                .setSubject(user.getNickname())
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis()+TOKEN_EXPIRE))
                .claim("user", JSONObject.toJSONString(user))
                .signWith(SignatureAlgorithm.HS256,TOKEN_KEY.getBytes())
                .compact();
        return token;
    }
    /**
     * 解析token的方法
     */
    public static UserVO checkToken(String token){
        Claims body=null;
        try {
            body = Jwts.parser().setSigningKey(TOKEN_KEY.getBytes())
                    .parseClaimsJws(token).getBody();
        }catch(Exception e){
            return null;
        }
        Object userJSONString=body.get("user");
        UserVO user=JSONObject.parseObject((String)userJSONString,UserVO.class);
        return user;
    }
}
